// File: jmcomic-core/src/main/java/dev/jukomu/common/base/packer/Packer.java
package dev.jukomu.common.base.packer;

import java.io.IOException;

/**
 * 对象的序列化和反序列化接口。
 */
public interface Packer {

    /**
     * 将对象序列化到指定文件路径。
     *
     * @param obj      要序列化的对象
     * @param filepath 文件路径
     * @throws IOException 如果序列化失败
     */
    void pack(Object obj, String filepath) throws IOException;

    /**
     * 从指定文件路径反序列化对象。
     *
     * @param filepath 文件路径
     * @param clazz    预期反序列化的目标类型（可选，某些实现可能需要，某些可能不需要）
     * @param <T>      目标类型
     * @return 反序列化后的对象
     * @throws IOException            如果反序列化失败
     * @throws ClassNotFoundException 如果找不到目标类（针对特殊序列化方式）
     */
    <T> T unpack(String filepath, Class<T> clazz) throws IOException, ClassNotFoundException;

    /**
     * 从字符串反序列化对象。
     *
     * @param text  要反序列化的字符串
     * @param clazz 预期反序列化的目标类型（可选）
     * @param <T>   目标类型
     * @return 反序列化后的对象
     * @throws IOException 如果反序列化失败
     */
    <T> T unpackByString(String text, Class<T> clazz) throws IOException;
}